基本的查询语句的结构
----------
select [字段表达式列表] [from子句] [where 子句] [group by 子句] [having 子句] [order by子句] [limit 子句]
字段表达式子句
-------
注意,表达式与别名的概念
1+1,$v1+10, abs(-10)
![](085389B72FBE12105F2F23BF0056DD8F.png)
如果 为 字段名,那么字段名就是一个 变量的概念,可以参与运算!
![](B4AB67339890D4F162AD79ED34BA3C0B.png)
因此,可以利用各种运算符,来形成SQL中的表达式!
例如:逻辑运算符:
![](E57F523009452AFDE0347FDE762A7342.png)
关系运算符:
![](261FA9C5078891339B65507B4674C875.png)
可以是一个列表
![](39231AB62D266E66CD465D3A7A73B843.png)
每个表达式,可以有一个别名:
select结果内,以 表达式本身来命名的!
![](49999434ED43903E726018079B2FBF7F.png)
但是,有两个典型的问题:
1, 表达式直接做名字不容易 识别!
2, 如果名字冲突,不能区分!
![](EB034D537848818855F414173D8FD318.png)
使用 AS 关键字可以使用别名,可以省略as关键字,但是不建议省略!
![](2607DE75BD6CD8BC60B331D6256BF207.png)
from子句
------
表示查询的来源,就是表!
可以写表名列表,使用逗号分割
![](CB48ABB26F125B24046818E996AD3D7B.png)
如果此时没有条件,相当于形成了一个 笛卡尔积!
A集合的每个元素,都与B集合的每个元素之间有个关联!
A表的所有记录,都与B表的所有记录之间存在关联!
此时结果中会将所有的字段都列出来,包括重名的!
![](211E2B47CFE23439C845DFAC33FCD3C5.png)
可以为 相应的字段名起别名:
此时 访问到某个字段需要使用 表名.字段名的形式!
![](731718F9C7559D589A34BB13D838D8DA.png)
表的别名
如果多次出现 表名.字段名的情况,可以为表名起别名!
![](79F4540BEBDE6F3FF9FC6041731386EA.png)
dual 的问题
虚拟表名问题
![](84A851C3A52F250D03C62AC46CA3987E.png)
是语法更加规范而已!
where子句,查询条件子句
--------------
where 条件表达式
运算符,变量(字段)
省略where子句,相当于永远为真~
![](3E81529848CD5BB50C91392876B42EF8.jpg)
where,找到每条记录,并依次执行条件表达式,根据条件结果返回数据!
形成 条件表达式的基本要素:
数据,(变量),运算符,函数调用()
典型的运算符:
关系: \> \< \>= \<= != =
like 模糊查询。数据 like ‘模式匹配符’
可以使用 % 和 \_ 作为通配符
![](278DB05E0FA929DA71708801E7AFE057.png)
not like,不像like取反!
![](4E6A710F418693F4D28F4D2AEAD29E24.png)
![](7A95EDF2361B7A2912AB22D089266370.png)
between 3 and 5, 在某个区间,闭区间。
![](A1EC4D9B9BAC158281B4DD354124D05B.png)
包括边界值:
![](AF566D41EB1A1A14851D416A3F5FB0D3.png)
in,在某个集合之内
in (元素列表)
not in,不在某个集合内
not in (元素列表)
![](D670F50E777F12350B80126A727F318C.png)
留心:
再做 批量操作时,in notin 的出镜率 很高!
集合(3,4,5)区间(3,4)
null 值的判断
不能使用普通的运算符,因为运算的结果都是null,而且不能作为查询条件!
![](E7008A5A54264F307781EEAA53020F8C.png)
![](74464D812491912F9D35A218785FF5EF.png)
应该使用 is null 或者 is not null 来判断!
![](6AA056D49A76B09E032E55E037BCF22D.png)
应该使用上面的来完成判断:
![](17DDFF843FB6E055B13F51A7AA028268.png)
函数 (isnull())也可以完成类似的判断:
![](8D5AC642A2B979226718DE48C16C633A.png)
注意:运算符也有的优先级的概念,注意可以使用 () 来修改优先级!
![](B7D46406130015568EE90E809ACAB0FA.png)
上一篇: [19、查询 select 的用法2](http://arick.leanote.com/post/19%E3%80%81%E6%9F%A5%E8%AF%A2%C2%A0select%C2%A0%E7%9A%84%E7%94%A8%E6%B3%952)
下一篇: [17、增加操作insert into](http://arick.leanote.com/post/17%E3%80%81%E5%A2%9E%E5%8A%A0%E6%93%8D%E4%BD%9Cinsert%C2%A0into)